热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

进尺|工作面_Java使用word模板创建word文档报告教程

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java使用word模板创建word文档报告教程相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java 使用word模板创建word文档报告教程相关的知识,希望对你有一定的参考价值。


 上面是java 利用word模板生成的一个word报告文档,利用的是第三方类库Poi-tl 是实现的。

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。 

poi-tl网址 Poi-tl Documentation,之前也用过其他几种生成word的方式,比如,直接用Apache POI去生成等,不过都比较麻烦一点,最后比较之后选择了用这个类库。下面给大家上代码教程。


一、pom文件中引入依赖(以为springboot项目为例)



com.deepoove
poi-tl
1.7.3


org.apache.poi
poi
4.1.2

注:Poi-tl包依赖poi包,版本对照关系如下图


 二、代码实现


import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
import org.springblade.core.tool.utils.DateUtil;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:
* @Author: Tarzan Liu
* @Date: 2022/9/13 4:54
*/
public class WordUtil
public static void test()
TestDTO data=new TestDTO();
data.setWorkFaceName("14030回采工作面");
data.setCreateDate(DateUtil.format(DateUtil.now(),"yyyy年MM月dd日"));
TestDTO.Progress progress=new TestDTO.Progress();
progress.setWorkFaceName("14030回采工作面");
progress.setDate("2019年06月");
progress.setProgress(69.2);
progress.setArea(13909.2);
progress.setProduction(115436.985);
progress.setCumulative(115436.985);
List list&#61;new ArrayList<>();
list.add(progress);
data.setList(list);
double totalProgress &#61; 0;
double totalArea&#61;0;
double totalProduction&#61;0;
for (TestDTO.Progress e : list)
totalProgress&#61;totalProgress&#43;e.getProgress();
totalArea&#61;totalArea&#43;e.getArea();
totalProduction&#61;totalProduction&#43;e.getProduction();

data.setTotalProgress(totalProgress);
data.setTotalArea(totalArea);
data.setTotalProduction(totalProduction);
data.setDpp(5790.472);
data.setDap(5860d);
data.setDop(sub(data.getDap(),data.getDpp()));
data.setMpp(179504.641);
data.setMap(115436.985);
data.setMop(sub(data.getMap(),data.getMpp()));
data.setYpp(2119312.857);
data.setYap(115436.985);
data.setYop(sub(data.getYap(),data.getYpp()));
data.setCpp(59.063);
data.setCap(57.085);
data.setCop(sub(data.getCap(),data.getCpp()));
data.setDpf(3.46);
data.setDaf(3.46);
data.setDof(sub(data.getDaf(),data.getDpf()));
data.setMpf(69.2);
data.setMaf(107.26);
data.setMof(sub(data.getMaf(),data.getMpf()));
data.setYpf(69.2);
data.setYaf(1266.36);
data.setYof(sub(data.getYaf(),data.getYpf()));
data.setCpf(352.92);
data.setCaf(352.92);
data.setCof(sub(data.getCaf(),data.getCpf()));
if(data.getMop()>0)
data.setRp("本月超出产量指标&#xff1a;"&#43;data.getMop()&#43;" 吨");
else
data.setRp("本月剩余产量指标&#xff1a;"&#43;Math.abs(data.getMop())&#43;" 吨");

if(data.getMof()>0)
data.setRf("本月超出进尺指标&#xff1a;"&#43;data.getMof()&#43;" 吨");
else
data.setRf("本月剩余进尺指标&#xff1a;"&#43;Math.abs(data.getMof())&#43;" 吨");

data.setFaultAge("F186断层");
data.setDistance(514.809);
HackLoopTableRenderPolicy policy &#61; new HackLoopTableRenderPolicy();
Configure config &#61; Configure.newBuilder().bind("list", policy).build();
XWPFTemplate template &#61; XWPFTemplate.compile("C:\\\\Users\\\\Lenovo\\\\Desktop\\\\word\\\\回采进度生产分析报告模板.docx",config).render(data);//调用模板&#xff0c;填充数据
try
FileOutputStream out &#61; new FileOutputStream("C:\\\\Users\\\\Lenovo\\\\Desktop\\\\word\\\\test.docx");//要导出的文件名
template.write(out);
out.flush();
out.close();
template.close();
catch (IOException e)
e.printStackTrace();


private static double sub(double a,double b)
BigDecimal x&#61;BigDecimal.valueOf(a);
BigDecimal y&#61;BigDecimal.valueOf(b);
BigDecimal z&#61;x.subtract(y);
return z.doubleValue();

public static void main(String[] args)
WordUtil.test();

TestDTO对象


import lombok.Data;
import java.util.List;
&#64;Data
public class TestDTO
private String createDate;
private String workFaceName;
private List list;
private Double totalProgress;
private Double totalArea;
private Double totalProduction;
private Double dpp;
private Double dap;
private Double dop;
private Double mpp;
private Double map;
private Double mop;
private Double ypp;
private Double yap;
private Double yop;
private Double cpp;
private Double cap;
private Double cop;
private Double dpf;
private Double daf;
private Double dof;
private Double mpf;
private Double maf;
private Double mof;
private Double ypf;
private Double yaf;
private Double yof;
private Double cpf;
private Double caf;
private Double cof;
private String rp;
private String rf;
private String faultAge;
private Double distance;
&#64;Data
static
class Progress
private String workFaceName;
private String date;
private Double progress;
private Double area;
private Double production;
private Double cumulative;

可以把内部类&#xff0c;改成单独类。运行WordUtil的主方法即可&#xff0c;生成word文档&#xff0c;可以根据自己的需求改造成接口。


三、word模板示例

 


推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
缺少小女人的温柔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有